#!/usr/bin/env python
# -*- coding: utf-8 -*-
g = (x * x for x in range(10))#g是一个generator生成器
# 如果要一个一个打印出来，可以通过next()函数获得generator的下一个返回值：
next(g)


# generator保存的是算法，每次调用next(g)，就计算出g的下一个元素的值，
# 直到计算到最后一个元素，没有更多的元素时，
# 抛出StopIteration的错误。


# 斐波拉契数列（Fibonacci）
"""
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        print(b)
        a, b = b, a + b
        n = n + 1
    return 'done'
"""


#生成器重写
def fib(max):
    n,a,b = 0,0,1

    while n < max:
        #print(b)
        yield  b
        a,b = b,a+b

        n += 1

    return 'done'
#fib() 生成器（迭代对象）
for i in fib(6):
    print(i)



def bar():
    print("ok1")
    count = yield 1#2，yield 1 退出 3,第二次进入 并复制
    print(count)#4
    yield 2#5,yield 2 退出

b=bar()
#1，进入函数体
b.send(None) #等同于next(b) 第一次send前面如果没有next，只能传send(None)
#3进入函数体 并给count复制  count=‘eeee’
ret = b.send("eeee") #yield 2 返回2